<?php

require_once dirname(__FILE__).'/db.config.cls.php';

/**
 * @author 
 * class qui permet de g�rer la connection a la base 
 * cette classe poss�de deux role
 * 1- testé la validité de la base
 * 2- connecté la base pour executer les requette et parcourir les donnée 
 *Remarque : la configuration de la base et dans le fichier XML "src/configure/config_xml/db.config.xml"
 */
class databaseconnect{
	private $_cnn;
	private $_config;
	private $_results;
	private $_last_id_insert;
	private $_erreurmsg;
	/**
	 * 
	 * 
	 * @param $lanque_select : langue d'affichage des erreur de la base (3 langue sont definies fr,ar,an)
	 * @param $test_db : si l'objet instanci� va �tre pour un test de validit� de la base ou pour la
	 *  connexion si $test_db=true alors il faut definir les variables (host,port,user,pwd,dbname)
	 * ces param�tres vont �tre definis pour servir comme test de connexion
	 * 
	 * @param $host : adresse server de la base des donn�es
	 * @param $port : le prot mysql
	 * @param $user : utilisateur qui va nous permettre de se connecter � la base
	 * @param $pwd : le mot de passse de l'utilisateur
	 * @param $dbname : nom de la base de donné a connecté
	 * @return unknown_type
	 */
	
	public function __construct($test_db=false,$host="",$port="",$user="",$pwd="",$dbname=""){
		
		if(!$test_db){
			///configuer c'est la methode qui permet de charger les information a partir de fichier XML
			$this->configure();
			
		}else{
			$this->set_config($host,$port,$user,$pwd,$dbname);
		}
		
	}
	
	
	
	/**
	 * 
	 * @return 
	 */
	public function get_last_id_insert(){
		return $this->_last_id_insert;
	}
	/**
	 * 
	 * @return 
	 */
	public function get_erreurmsg(){
		return $this->_erreurmsg;
	}
	/**
	 * 
	 * @return la configuration de la base extraite de fichier XML
	 */
	/**
	 * 
	 * @return la configuration de la base extraite de fichier XML
	 */
	public function get_config(){
		return $this->_config; 
	}
	/**
	 * configurer la base manuellement
	 * @param $host :serveur de la base de donées
	 * @param $port : PORT de connection a la base
	 * @param $user : utilisateur de la base
	 * @param $pwd : mot de passe de l'utilisateur 
	 * @param $dbname : nom de la base de donnée
	 * @return unknown_type
	 */
	
	public function set_config($host,$port,$user,$pwd,$dbname=""){
		 $this->_config->set_host($host);
		 $this->_config->set_bd($dbname);
		 $this->_config->set_port($port);
		 $this->_config->set_user($user);
		 $this->_config->set_pwd($pwd);
	}
	/**
	 * connexté la base de donnée
	 * @return  true en cas de succée et un  exception en cas de problém
	 * le message d'erreur et charger apartir d'un fichier message.xml
	 */
	public function connect(){
		try{
			$this->_cnn = mysql_connect(
				$this->_config->get_host().":".$this->_config->get_port(),
				$this->_config->get_user(),
				$this->_config->get_pwd()
			);
			mysql_query("SET NAMES 'utf8'", $this->_cnn );
			return true;
		}catch (Exception $e){
			throw new Exception("ERREUR DE CNX".$e);
		}
	}
	
	/**
	 * charger les information apartir d'un  ficher XMl
	 * @return 
	 */
	private function configure(){
		try{
			$this->_config=new DBConfig(dirname(__FILE__)."/../configure/config_xml/db.config.xml");
		}catch(Exception $e){
			throw new Exception("ERREUR DE CNX".$e);;
		}
	}
	
	/**
	 * selectionner (activé la base sur la qu'elle on va travaillé) la base de donnée ou on va travaié
	 * @return  
	 */
	public function selec_db(){
		try{
			mysql_select_db(
					$this->_config->get_bd(),
					$this->_cnn
			); 
			return true;
		}catch (Exception $e){ 
			throw new Exception("ERREUR DE CNX".$e);;
		}
	}
	/**
	 * retourne la connection a la base de donnée
	 * @return return la connection a la base de donnée
	 */
	public function get_cnn(){
		return $this->_cnn;
	}
	/**
	 * 
	 * @return resulta de la requette de selection
	 */
	public function get_result(){
		return $this->_results;
	}
	
	/**
	 * 
	 * @param $dbname nom de la base a crée
	 * @return une base crée
	 */
	public function create_db($dbname){
		try{
			return mysql_query("CREATE DATABASE $dbname",$this->_cnn);
		}catch (Exception $e){
			throw new Exception("ERREUR DE CNX".$e);;			
		}
	}
	/**
	 * executer une requette sql
	 * @param $sql : requette sql a executer la résulta et mise dans un objet result qui peut etre utiliser aprés
	 * @return unknown_type
	 */
	public function query($sql){
			try{
			$strsql=trim($sql);
			$operation=explode(" ", $strsql);
			$this->connect();
			$this->selec_db();
			$tmp=$this->_config->get_bd();
			$this->_results=mysql_db_query($tmp,$sql);
			if(strtoupper($operation[0]) =='INSERT'){$this->_last_id_insert= mysql_insert_id();}
			$this->_erreurmsg= mysql_error();
			$this->close_db();
			return $this->_results;			
		}catch (Exception $e){
			throw new Exception("ERREUR DE CNX".$e);;			
		}
			
		
	}
	public function close_db(){
		mysql_close($this->_cnn);
	}
	/**
	 * retourné le cursseur au premier enregisterement de la base
	 * @return unknown_type
	 */
	public 	function rewind(){
		
	}
	
	/**
	 * cette methode permet de retournée un champs de la base
	 * @return un enrefistrement de la liste des enregistrement selectionn�e
	 */
	public 	function fetchObject(){
		try{
			$row = mysql_fetch_object($this->_results);
			$this->_erreurmsg= mysql_error();
			return $row;
		}catch (Exception $e){
			throw new Exception("ERREUR DE CNX".$e);;			
		}
	}
	/**
	 * 
	 * @return nombre de ligne selectionn�e
	 */
	public function numRows(){
		try{
			$count = mysql_num_rows($this->_results);
			$this->_erreurmsg= mysql_error();
			return $count;		
		}catch (Exception $e){
			throw new Exception("ERREUR DE CNX".$e);;			
		}
	}
	/**
	 * 
	 * destructeur de la class
	 * 
	 */
	public function __destruct(){
		try{
			if($this->_cnn !=null){
				@mysql_close($this->_cnn);
			}
			$this->_erreurmsg= mysql_error();
		}catch(Exception $e){
			throw new Exception("ERREUR DE CNX".$e);;
		}
	}

}
